package co.edu.udea.iw.rtf.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.rtf.dao.UsuarioDAO;
import co.edu.udea.iw.rtf.dto.Usuario;
import co.edu.udea.iw.rtf.exception.RTFDaoException;

public class UsuarioDAOImpl extends HibernateDaoSupport implements UsuarioDAO {

	/**
	 * Metodo que obtiene los datos de un usuario de acuerdo a su login
	 * Creaun objeto de tipo Usuario ya signa los datos obtenidos en la consulta de Session hibernate
	 * @param login
	 * @return Usuario
	 */
	@Override
	public Usuario obtener(String login) throws RTFDaoException {
		
		Usuario usuario;
		Session sesion = null;
		try{
			sesion = getSession();
			
			usuario = (Usuario)sesion.get(Usuario.class, login);

			return usuario;
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
		
	}
	
	/**
	 * Metodo que obtiene la lista de usuarios que se encuentra activo en la base de datos
	 * crea un ArrayLista al cual asigna la lista de datos obtenidos en la consulta por medio de Session Hibernate y los ordena por Nombre
	 * @return List<Usuario>
	 */
	@Override
	public List<Usuario> obtenerActivos() throws RTFDaoException {
		
		List<Usuario> usuarios = new ArrayList<Usuario>();
		
		Session sesion = null;
		try{
			sesion = getSession();
			
			usuarios = sesion.createCriteria(Usuario.class)
							.addOrder(Order.asc("nombreCompleto"))
							.add(Restrictions.eq("activo", true))
							.list();

			return usuarios;
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
		
	}

}
